package com.czk.queue;

/**
 * 单向队列，只能使用一次
 * @Author:ChenZhangKun
 * @Date: 2020/6/7 22:36
 */
public class ArrayQueueDemo {
    public static void main(String[] args) {
        ArrayQueue arrayQueue=new ArrayQueue(3);
        arrayQueue.addQueue(3);
        arrayQueue.addQueue(2);
        // 3
        System.out.println(arrayQueue.getQueue());
        // 2
        //System.out.println(arrayQueue.getQueue());
        // 2
        System.out.println(arrayQueue.headQueue());
        // 报错
        System.out.println(arrayQueue.getQueue());
    }
}
// 编写类模拟数组队列
class ArrayQueue{
    // 最大容量
    private int maxSize;
    // 队列头指针 指向队列头的前一个位置
    private int front;
    // 队列尾指针
    private int rear;
    // 数组
    private int[] array;

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        array=new int[maxSize];
        // 指向队列头部
        front=-1;
        // 指向队列尾
        rear=-1;
    }
    // 判断队列是否满
    public boolean isFull(){
        return rear==maxSize-1;
    }
    // 判断队列是否为空
    public boolean isEmpty(){
        return front==rear;
    }
    // 添加数据在队列
    public void addQueue(int n){
        if (isFull()){
            System.out.println("队列满，不能加入数据");
        }
        // 后移尾指针
        rear++;
        array[rear]=n;
    }
    // 出队列
    public int getQueue(){
        // 判断队列是否为空
        if (isEmpty()){
            System.out.println("队列为空，不能取数据");
            throw new RuntimeException("队列为空");
        }
        front++;
        return array[front];
    }
    // 显示队列的所有数据
    public void showQueue(){
        if(isEmpty()){
            System.out.println("没有数据");
            return;
        }
        for (int i : array) {
            System.out.print(i+" ");
        }
    }
    // 显示队列的头部
    public int headQueue(){
        if (isEmpty()){
            System.out.println("队列空，没数据");
            throw new RuntimeException("没数据");
        }
        return array[front+1];
    }
}
